﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace MikroStokAlimi
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }


        public bool AddToStok(string kod, string adi, string ana_grup_kod, string birim1_ad, decimal birim1_katsayi, string birim2_ad, decimal birim2_katsayi, string alt_grup_kod, string teminci_kod, int kdv_orani, string muhasebekodu, decimal fiyat1, decimal fiyat2, decimal fiyat3)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("if exists(select sto_RECno from STOKLAR WITH (NOLOCK) where sto_kod= '{0}')");
            sb.Append("update STOKLAR set sto_SpecRECno=0,sto_iptal=0,sto_fileid=13,sto_hidden=0,sto_kilitli=0,sto_degisti=0,sto_checksum=0,sto_lastup_user=1,sto_lastup_date='{1}',sto_special1='',sto_special2='',sto_special3='',sto_isim='{2}',sto_kisa_ismi='',sto_yabanci_isim='',sto_cins=0,sto_doviz_cinsi=0,sto_detay_takip=0,sto_birim1_ad='{3}',sto_birim1_katsayi={4},sto_birim1_agirlik=0,sto_birim1_en=0,sto_birim1_boy=0,sto_birim1_yukseklik=0,sto_birim1_dara=0,sto_birim2_ad='{5}',sto_birim2_katsayi={6},sto_birim2_agirlik=0,sto_birim2_en=0,sto_birim2_boy=0,sto_birim2_yukseklik=0,sto_birim2_dara=0,sto_birim3_ad='',sto_birim3_katsayi=0,sto_birim3_agirlik=0,sto_birim3_en=0,sto_birim3_boy=0,sto_birim3_yukseklik=0,sto_birim3_dara=0,sto_birim4_ad='',sto_birim4_katsayi=0,sto_birim4_agirlik=0,sto_birim4_en=0,sto_birim4_boy=0,sto_birim4_yukseklik=0,sto_birim4_dara=0,sto_karorani=0,sto_min_stok=0,sto_siparis_stok=0,sto_max_stok=0,sto_ver_sip_birim=0,sto_al_sip_birim=0,sto_siparis_sure=0,sto_perakende_vergi={7},sto_toptan_vergi={7},sto_elk_etk_tipi=0,sto_raf_etiketli=1,sto_etiket_bas=1,sto_satis_dursun=0,sto_siparis_dursun=0,sto_malkabul_dursun=0,sto_malkabul_gun1=0,sto_malkabul_gun2=0,sto_malkabul_gun3=0,sto_malkabul_gun4=0,sto_malkabul_gun5=0,sto_malkabul_gun6=0,sto_malkabul_gun7=0,sto_siparis_gun1=0,sto_siparis_gun2=0,sto_siparis_gun3=0,sto_siparis_gun4=0,sto_siparis_gun5=0,sto_siparis_gun6=0,sto_siparis_gun7=0,sto_iskon_yapilamaz=0,sto_tasfiyede=0,sto_alt_grup_no=0,sto_urun_sorkod='',sto_mkod_artik='',sto_kasa_tarti_fl=0,sto_bedenli_takip=0,sto_renkDetayli=0,sto_miktarondalikli_fl=0,sto_pasif_fl=0,sto_calisan_vi_gecerli=0,sto_eksiyedusebilir_fl=0,sto_GtipNo='',sto_puan=0,sto_komisyon_hzmkodu='',sto_komisyon_orani=0,sto_otvuygulama=0,sto_otvtutar=0,sto_otvliste=0,sto_otvbirimi=1,sto_prim_orani=0,sto_garanti_sure=0,sto_iplik_Ne_no=0,sto_standartmaliyet=0,sto_kanban_kasa_miktari=0,sto_oivuygulama=0,sto_zraporu_stoku_fl=0,sto_maxiskonto_orani=0,sto_detay_takibinde_depo_kontrolu_fl=0,sto_oto_barkod_acma_sekli=0,sto_KasaIskontoOrani=0,sto_KasaIskontoTutari=0,sto_gelirpayi=0,sto_giderkodu='',sto_sat_cari_kod='{8}',sto_altgrup_kod='{9}',sto_anagrup_kod='{10}',sto_muhgrup_kodu='{11}' where sto_kod='{0}' else ");
            sb.Append("insert into STOKLAR (sto_RECid_DBCno,sto_RECid_RECno,sto_SpecRECno,sto_iptal,sto_fileid,sto_hidden,sto_kilitli,sto_degisti,sto_checksum,sto_create_user,sto_create_date,sto_lastup_user,sto_lastup_date,sto_special1,sto_special2,sto_special3,sto_kod,sto_isim,sto_kisa_ismi,sto_yabanci_isim,sto_sat_cari_kod,sto_cins,sto_doviz_cinsi,sto_detay_takip,sto_birim1_ad,sto_birim1_katsayi,sto_birim1_agirlik,sto_birim1_en,sto_birim1_boy,sto_birim1_yukseklik,sto_birim1_dara,sto_birim2_ad,sto_birim2_katsayi,sto_birim2_agirlik,sto_birim2_en,sto_birim2_boy,sto_birim2_yukseklik,sto_birim2_dara,sto_birim3_ad,sto_birim3_katsayi,sto_birim3_agirlik,sto_birim3_en,sto_birim3_boy,sto_birim3_yukseklik,sto_birim3_dara,sto_birim4_ad,sto_birim4_katsayi,sto_birim4_agirlik,sto_birim4_en,sto_birim4_boy,sto_birim4_yukseklik,sto_birim4_dara,sto_muh_kod,sto_muh_Iade_kod,sto_muh_sat_muh_kod,sto_muh_satIadmuhkod,sto_muh_sat_isk_kod,sto_muh_aIiskmuhkod,sto_muh_satmalmuhkod,sto_yurtdisi_satmuhk,sto_ilavemasmuhkod,sto_yatirimtesmuhkod,sto_depsatmuhkod,sto_depsatmalmuhkod,sto_bagortsatmuhkod,sto_satfiyfarkmuhkod,sto_yurtdisisatmalmuhkod,sto_bagortsatmalmuhkod,sto_karorani,sto_min_stok,sto_siparis_stok,sto_max_stok,sto_ver_sip_birim,sto_al_sip_birim,sto_siparis_sure,sto_perakende_vergi,sto_toptan_vergi,sto_yer_kod,sto_elk_etk_tipi,sto_raf_etiketli,sto_etiket_bas,sto_satis_dursun,sto_siparis_dursun,sto_malkabul_dursun,sto_malkabul_gun1,sto_malkabul_gun2,sto_malkabul_gun3,sto_malkabul_gun4,sto_malkabul_gun5,sto_malkabul_gun6,sto_malkabul_gun7,sto_siparis_gun1,sto_siparis_gun2,sto_siparis_gun3,sto_siparis_gun4,sto_siparis_gun5,sto_siparis_gun6,sto_siparis_gun7,sto_iskon_yapilamaz,sto_tasfiyede,sto_alt_grup_no,sto_kategori_kodu,sto_urun_sorkod,sto_altgrup_kod,sto_anagrup_kod,sto_uretici_kodu,sto_sektor_kodu,sto_reyon_kodu,sto_muhgrup_kodu,sto_ambalaj_kodu,sto_marka_kodu,sto_beden_kodu,sto_renk_kodu,sto_model_kodu,sto_sezon_kodu,sto_hammadde_kodu,sto_prim_kodu,sto_kalkon_kodu,sto_paket_kodu,sto_mkod_artik,sto_kasa_tarti_fl,sto_bedenli_takip,sto_renkDetayli,sto_miktarondalikli_fl,sto_pasif_fl,sto_calisan_vi_gecerli,sto_eksiyedusebilir_fl,sto_GtipNo,sto_puan,sto_komisyon_hzmkodu,sto_komisyon_orani,sto_otvuygulama,sto_otvtutar,sto_otvliste,sto_otvbirimi,sto_prim_orani,sto_garanti_sure,sto_iplik_Ne_no,sto_standartmaliyet,sto_kanban_kasa_miktari,sto_oivuygulama,sto_zraporu_stoku_fl,sto_maxiskonto_orani,sto_detay_takibinde_depo_kontrolu_fl,sto_tamamlayici_kodu,sto_oto_barkod_acma_sekli,sto_oto_barkod_kod_yapisi,sto_KasaIskontoOrani,sto_KasaIskontoTutari,sto_gelirpayi,sto_giderkodu) values (0,-1,0,0,13,0,0,0,0,1,'{1}',1,'{1}','','','','{0}','{2}','','','{8}',0,0,0,'{3}',{4},0,0,0,0,0,'{5}',{6},0,0,0,0,0,'',0,0,0,0,0,0,'',0,0,0,0,0,0,'153','153','600','610','611','153','621','601','153','258','600','621','600','600','621','621',0,0,0,0,0,0,0,{7},{7},'',0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','','{9}','{10}','','','','{11}','','','','','','','','','','','',0,0,0,0,0,0,0,'',0,'',0,0,0,0,1,0,0,0,0,0,0,0,0,0,'',0,'',0,0,0,'') ");
            sb.Append(";update STOKLAR set sto_RECid_RECno=sto_RECno where sto_RECid_RECno=-1");

            try
            {
                Data.Get.ExecQuery(string.Format(sb.ToString(), kod, string.Format("{0}-{1}-{2} {3}:{4}:{5}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second), adi, birim1_ad, birim1_katsayi, birim2_ad, birim2_katsayi, kdv_orani, teminci_kod, alt_grup_kod, ana_grup_kod, muhasebekodu));

                StringBuilder sb2 = new StringBuilder();
                sb2.Append("if exists(SELECT     sfiyat_RECno  FROM         STOK_SATIS_FIYAT_LISTELERI WHERE     (sfiyat_stokkod = '{0}') AND (sfiyat_listesirano = @fiyatno) AND (sfiyat_deposirano = 0) AND (sfiyat_odemeplan = 0)) ");
                sb2.Append("delete from STOK_SATIS_FIYAT_LISTELERI where    (sfiyat_stokkod = '{0}') AND (sfiyat_listesirano = @fiyatno) AND (sfiyat_deposirano = 0) AND (sfiyat_odemeplan = 0);");
                sb2.Append("INSERT INTO STOK_SATIS_FIYAT_LISTELERI (sfiyat_RECid_DBCno, sfiyat_RECid_RECno, sfiyat_SpecRECno, sfiyat_iptal, sfiyat_fileid, sfiyat_hidden, sfiyat_kilitli, sfiyat_degisti, sfiyat_checksum,sfiyat_create_user, sfiyat_create_date, sfiyat_lastup_user, sfiyat_lastup_date, sfiyat_special1, sfiyat_special2, sfiyat_special3, sfiyat_stokkod, sfiyat_listesirano,sfiyat_deposirano, sfiyat_odemeplan, sfiyat_fiyati, sfiyat_doviz, sfiyat_iskontokod, sfiyat_deg_nedeni, sfiyat_primyuzdesi, sfiyat_kampanyakod) ");
                sb2.Append("VALUES     (0, -1, 0, 0, 228, 0, 0, 0, 0, 1, getdate(), 1, getdate(), '', '', '', '{0}', @fiyatno, 0, 0, @fiyat, 0, '', 0,0,'')");
                sb2.Append(";update STOK_SATIS_FIYAT_LISTELERI set  sfiyat_RECid_RECno=sfiyat_RECno where sfiyat_RECid_RECno=-1");

                SqlParameter prm1 = new SqlParameter("@fiyat", SqlDbType.Float);
                SqlParameter prm2 = new SqlParameter("@fiyatno", SqlDbType.Float);

                if (fiyat1 > 0)
                {
                    prm1.Value = fiyat1;
                    prm2.Value = 1;
                    Data.Get.ExecQuery(string.Format(sb2.ToString(), kod), prm1, prm2);
                }

                if (fiyat2 > 0)
                {
                    prm1.Value = fiyat2;
                    prm2.Value = 2;
                    Data.Get.ExecQuery(string.Format(sb2.ToString(), kod), prm1, prm2);
                }

                if (fiyat3 > 0)
                {
                    prm1.Value = fiyat3;
                    prm2.Value = 3;
                    Data.Get.ExecQuery(string.Format(sb2.ToString(), kod), prm1, prm2);
                }

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public void BarkodEkle(string barkod, string stokkod)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("if not exists(select bar_RECid_DBCno from BARKOD_TANIMLARI where bar_kodu=@barkod) INSERT INTO BARKOD_TANIMLARI ");
            sb.Append(" (bar_RECid_DBCno,bar_RECid_RECno,bar_SpecRECno,bar_iptal,bar_fileid,bar_hidden,bar_kilitli,bar_degisti,bar_checksum,bar_create_user,bar_create_date,bar_lastup_user,bar_lastup_date,bar_special1,bar_special2,bar_special3,bar_kodu,bar_stokkodu,bar_partikodu,bar_lotno,bar_serino_veya_bagkodu,bar_barkodtipi,bar_icerigi,bar_birimpntr,bar_master,bar_bedenpntr,bar_renkpntr,bar_baglantitipi,bar_harrecid_dbcno,bar_harrecid_recno)  ");
            sb.Append(" VALUES(0,-1,0,0,15,0,0,0,0,@usr,@tarih,@usr,@tarih,N'',N'',N'',@barkod,@stokkod,N'',0,N'',0,0,@birim,0,0,0,0,0,0);update BARKOD_TANIMLARI set bar_RECid_RECno=bar_RECno where bar_RECid_RECno=-1");

            SqlParameter prm1 = new SqlParameter("@usr", SqlDbType.Int);
            prm1.Value = 0;

            SqlParameter prm2 = new SqlParameter("@tarih", SqlDbType.DateTime);
            prm2.Value = DateTime.Now;

            SqlParameter prm3 = new SqlParameter("@barkod", SqlDbType.VarChar);
            prm3.Value = barkod;

            SqlParameter prm4 = new SqlParameter("@stokkod", SqlDbType.VarChar);
            prm4.Value = stokkod;

            SqlParameter prm5 = new SqlParameter("@birim", SqlDbType.TinyInt);
            prm5.Value = 1;

            Data.Get.ExecQuery(sb.ToString(), prm1, prm2, prm3, prm4, prm5);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "CSV Noktalı Virgülle Ayrılmış|*.csv";
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox1.Text = dlg.FileName;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex > -1)
            {
                Data.Get.Database = "MikroDB_V14_" + comboBox1.Text;

                if (File.Exists(textBox1.Text))
                {
                    using (StreamReader sr = new StreamReader(textBox1.Text))
                    {
                        while (sr.Peek() > -1)
                        {
                            string[] fields = sr.ReadLine().Split(';');

                            AddToStok(fields[0], fields[1], "", "ADET", 1, "", 0, "", "", Convert.ToInt32(fields[2]), "", Convert.ToDecimal(fields[3]), 0, 0);
                            BarkodEkle(fields[4], fields[0]);
                        }
                        sr.Close();
                    }
                }
            }

        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.InitialDirectory = "c:\\mikro";
            dlg.Filter = "Database.ini|*.ini";
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string[] lines = File.ReadAllLines(dlg.FileName);
                string servername = lines[1].Split('=')[1];
                Data.Get.Server = servername;
                Data.Get.Database = "MikroDB_V14";

                DataTable dt = Data.Get.List("SELECT        DB_kod  FROM            VERI_TABANLARI");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    comboBox1.Items.Add(dt.Rows[i][0].ToString());
                    comboBox1.SelectedIndex = 0;
                }
            }
        }
    }
}
